===== НАЧАЛО САЙТА https://news.google.com/home?hl=ru&gl=RU&ceid=RU:ru ====== Google Новости

Сводка новостей

Погода в вашем регионе
20 °C
weather.com
Фонтанка.Ру

Зеленский улетел из Турции на Украину вместе с пятью командирами запрещенного «Азова»* - 8 июля 2023

БИЗНЕС Online

Зеленский сообщил о возвращении из Турции командиров «Азова»*

Forbes Russia

Зеленский сообщил о возвращении из Турции пяти командиров «Азова»

Фонтанка.Ру

Песков: возвращение из Турции на Украину главарей «Азова»* нарушает договорённости

Новые Известия

Украина обещает использовать кассетные боеприпасы «очень осмотрительно» — Последние новости России и мира сегодня

Интерфакс

МИД РФ осудил решение США поставлять Украине кассетные боеприпасы

БИЗНЕС Online

Демократы США выступили против передачи Украине кассетных боеприпасов

Liga.net

Министр обороны Испании вслед за Бербок раскритиковала передачу кассетных боеприпасов ВСУ


Местные новости
Интерфакс

Эрдоган надеется на встречу с Путиным в Турции в августе

Регион64

Саратовцев предупредили о 40-градусной жаре и грозах

Подобранные для вас

Войдите в аккаунт, чтобы получать интересные рекомендации в сводке и ленте новостей.
Поиск
Удалить поисковый запрос
Закрыть поиск
Приложения Google
Главное меню
===== КОНЕЦ САЙТА https://news.google.com/home?hl=ru&gl=RU&ceid=RU:ru ====== ===== НАЧАЛО САЙТА https://bigpicture.ru/ ====== БигПикча НОВОСТИ В ФОТОГРАФИЯХ

БигПикча НОВОСТИ В ФОТОГРАФИЯХ

«Вилла общего пользования», или Как туалет стал орудием мести влюбленного

«Вилла общего пользования», или Как туалет стал орудием мести влюбленного

Тайны «Эммануэль»: триумф, жизнь и смерть Сильвии Кристель

Тайны «Эммануэль»: триумф, жизнь и смерть Сильвии Кристель

Смотрите Топ-100 лучших постов БигПикчи!

Смотрите Топ-100 лучших постов БигПикчи!

Вы настоящий ценитель красивых фото и интересных историй? Подписывайтесь на наш Телеграм!

Вы настоящий ценитель красивых фото и интересных историй? Подписывайтесь на наш Телеграм!

5 основных ролей, которые играют в отношениях влюбленные женщины

5 основных ролей, которые играют в отношениях влюбленные женщины

Краткое пособие для отпускниц

Краткое пособие для отпускниц

Как сохранить эффективность в условиях кризиса?

Как сохранить эффективность в условиях кризиса?

Трагическая судьба Нима Чимпского, или Можно ли из обезьяны сделать человека

Трагическая судьба Нима Чимпского, или Можно ли из обезьяны сделать человека

5 полезных советов для летних тренировок

5 полезных советов для летних тренировок

15 очаровательных животных, которые наслаждаются ароматом цветов

15 очаровательных животных, которые наслаждаются ароматом цветов

Ешь ананасы, рябчиков жуй: как отдыхали в советских и американских ресторанах по разные стороны «железного занавеса» в 60-е годы

Ешь ананасы, рябчиков жуй: как отдыхали в советских и американских ресторанах по разные стороны «железного занавеса» в 60-е годы

7 самых милых животных с острова Хоккайдо

7 самых милых животных с острова Хоккайдо

Тайна смерти актрисы Инны Бурдученко — заговор врагов или банальная халатность?

Тайна смерти актрисы Инны Бурдученко — заговор врагов или банальная халатность?

Почему в США так популярно обрезание? И дело вовсе не в гигиене или религии

Почему в США так популярно обрезание? И дело вовсе не в гигиене или религии

25 примеров необычной мебели, которая вызывает смех и восхищение в соцсетях

25 примеров необычной мебели, которая вызывает смех и восхищение в соцсетях

Что граждане СССР могли купить за 10 копеек

Что граждане СССР могли купить за 10 копеек

В Токио работает клуб, где мужчины могут побороться с девушками

В Токио работает клуб, где мужчины могут побороться с девушками

===== КОНЕЦ САЙТА https://bigpicture.ru/ ====== ===== НАЧАЛО САЙТА https://www.gazeta.ru/ ====== Главные новости - Газета.Ru
Gazeta.ru на рабочем столе
для быстрого доступа
Установить
Не сейчас
Картина дня
Новости и материалы
В США рассказали об эффективности кассетных боеприпасов для Украины
Беркович назначили новую экспертизу
В Минобороны Украины рассказали о поставке кораблей
Землетрясение магнитудой 5,6 произошло в Тайване
На Украине назначен новый командующий Нацгвардией
В ЦСКА ответили на вопрос об опасениях по поводу Федотова, пропустившего сезон из-за службы в армии
Ученые назвали шесть продуктов, снижающих риск болезней сердца
Юлия Ковальчук родила второго ребенка
В Латвии заявили, что вступление Украины в НАТО во время конфликта невозможно
В США жестко прокомментировали слова президента ЦСКА о переходе Федотова
Президент ЦСКА рассказал, как вратарь Федотов подписал контракт с клубом
В Тель-Авиве демонстранты перекрыли шоссе
Лукашенко: без национального достоинства не может быть суверенитета
Параметры тренировок с весами мало влияют на рост мышц и силы, выяснили ученые
Бейл может перейти в ЦСКА
Найден новый признак ранней стадии болезни Паркинсона
Юрист объяснил, что делать, если бывший супруг не хочет платить алименты
Журналист The Athletic: если НХЛ тоже перестанет соблюдать контракты, то для КХЛ будет очень плохо
Кадыров ушел в отпуск
В Волгоградской области сообщили об осложнении тушения пожара близ порта
Все новости
Cамое читаемое
Загрузка
===== КОНЕЦ САЙТА https://www.gazeta.ru/ ====== ===== НАЧАЛО САЙТА https://www.maxim.com/ ====== Maxim

===== КОНЕЦ САЙТА https://www.maxim.com/ ====== ===== НАЧАЛО САЙТА https://www.maximonline.ru/ ====== Мужской онлайн-журнал | MAXIM

Ваш браузер устарел, поэтому сайт может отображаться некорректно. Обновите ваш браузер для повышения уровня безопасности, скорости и комфорта использования этого сайта.
Обновить браузер

7 пищевых отбросов, которые нельзя кидать в раковину

Лайфстайл

7 пищевых отбросов, которые нельзя кидать в раковину
Горячие фото экс-солистки группы «Блестящие»: Юлия Ковальчук второй раз стала мамой

Развлечения

Горячие фото экс-солистки группы «Блестящие»: Юлия Ковальчук второй раз стала мамой
Олег Гордиевский: величайший шпион, о котором никто не слышал

Истории

Олег Гордиевский: величайший шпион, о котором никто не слышал
Как фотографировать Луну, чтобы вышло круто

В курсе

Как фотографировать Луну, чтобы вышло круто
Нелли Ермолаева: все о звезде «Дома-2», которая нашла свое счастье за периметром (и фото)

Развлечения

Нелли Ермолаева: все о звезде «Дома-2», которая нашла свое счастье за периметром (и фото)
Валя Карнавал похудела: такой знаменитую тиктокершу вы еще не видели (горячие пляжные фото)

Развлечения

Валя Карнавал похудела: такой знаменитую тиктокершу вы еще не видели (горячие пляжные фото)
Хитромудрый тест: Так ли хорошо вы знаете комедию «Золотой теленок», как вам кажется?

Тесты

Хитромудрый тест: Так ли хорошо вы знаете комедию «Золотой теленок», как вам кажется?
На каких автомобилях ездят полицейские в России

Наука и техника

На каких автомобилях ездят полицейские в России
Танковые асы Второй мировой: реальное видео танковых боев

Истории

Танковые асы Второй мировой: реальное видео танковых боев
5 популярных физических упражнений, от которых практически нет пользы

Спорт

5 популярных физических упражнений, от которых практически нет пользы
Котопёс недели: возьмите из приюта веселого пса Дьюка или изящную кошку Шакиру

В курсе

Котопёс недели: возьмите из приюта веселого пса Дьюка или изящную кошку Шакиру
16 обложек пластинок, которые были запрещены цензурой

Развлечения

16 обложек пластинок, которые были запрещены цензурой
Правда ли, что на свежем воздухе не бывает похмелья

Истории

Правда ли, что на свежем воздухе не бывает похмелья
Подписываясь на рассылку вы принимаете условия пользовательского соглашения
===== КОНЕЦ САЙТА https://www.maximonline.ru/ ====== ===== НАЧАЛО САЙТА https://meduza.io/ ====== Новости — Meduza
Перейти к материалам

Новости

Ранним утром 24 февраля 2022 года редакция «Медузы» запустила первую онлайн-трансляцию о вторжении российских войск в У… Читать дальше
Ранним утром 24 февраля 2022 года редакция «Медузы» запустила первую онлайн-трансляцию о вторжении российских войск в Украину. Вот уже 500 дней, как идет война, — и 500 дней, как мы рассказываем о том, что происходит на фронте и за его пределами. Рассказываем, как гибнут военные, как умирают и бегут от боевых действий мирные жители, как Россия уничтожает украинские города, как Украина сопротивляется агрессии, как Зеленский меняет западное мнение по поводу России, как мир помогает украинскому народу одержать победу. Каждый день мы ведем онлайн, чтобы как можно более тщательно и точно зафиксировать происходящее. Посмотрите, как выглядели 500 передовиц нашего онлайна.
подкасты

Когда ждать ускорения контрнаступления ВСУ (если это вообще возможно)? Объясняет Дмитрий Кузнец

39 минут
Когда ждать ускорения контрнаступления ВСУ (если это вообще возможно)? Объясняет Дмитрий Кузнец
00:0038:35
В Вильнюсе в ночь на 7 июля подожгли инсталляцию «ШИЗО» — копию изолятора во владимирской колонии, куда 16 раз сажали р… Читать дальше
В Вильнюсе в ночь на 7 июля подожгли инсталляцию «ШИЗО» — копию изолятора во владимирской колонии, куда 16 раз сажали российского политика Алексея Навального. О поджоге инсталляции, установленной на площади Европы, сообщила куратор проекта Ольга Гусева. Она обратилась в полицию. «Полиция отсматривает камеры видеонаблюдения и думаю, что там будет видно кто совершил поджог», — сказала она в беседе с «Медузой». Впервые инсталляцию «ШИЗО» представили в январе 2023 года в Берлине.
Ольга Гусева, куратор инсталляции «ШИЗО»

Подпишитесь на «Сигнал» — имейл-рассылку от создателей «Медузы». Она помогает понимать новости и будет работать до тех пор, пока в России есть интернет. Защита от спама reCAPTCHA. Конфиденциальность и условия использования

Выпускницы журфака СПбГУ провели акцию в поддержку журналистки «Новой газеты» Елены Милашиной, которую жестоко избили в… Читать дальше
Выпускницы журфака СПбГУ провели акцию в поддержку журналистки «Новой газеты» Елены Милашиной, которую жестоко избили в Чечне. 6 июля на вручении дипломов две студентки развернули плакат с портретом Милашиной и подписью «Лицо российской журналистики». «Своим пикетом мы хотели бы поддержать Елену Милашину от лица неравнодушных выпускников. Сломанные в 14 местах пальцы — это та цена, которую сейчас платят за правду и возможность ее доносить людям», — рассказала «Новой газете» одна из организаторов акции. По словам девушек, они простояли в пикете 25 минут, пока один из однокурсников, работающий в государственном СМИ, не заявил им, что за ними выехал ОМОН. «Вызвал ли он полицию — мы не знаем», — добавили организаторы акции.
===== КОНЕЦ САЙТА https://meduza.io/ ====== ===== НАЧАЛО САЙТА https://www.woolha.com/tutorials/project-reactor-cachemono-cacheflux-with-caffeine-examples ====== Project Reactor - CacheMono & CacheFlux with Caffeine Examples - Woolha

Project Reactor - CacheMono & CacheFlux with Caffeine Examples

Posted on 24 Jul 2021 by Ivan Andrianto

Project Reactor - CacheMono & CacheFlux with Caffeine Examples

This tutorial shows you how to use CacheMono and CacheFlux in Project Reactor, including how to use them with Caffeine.

If you're using Project Reactor, sometimes you may want to cache a Mono or a Flux. Fortunately, it already provides an opinionated caching helper called CacheMono and CacheFlux. They define a cache abstraction for storing and restoring a Mono or a Flux. This tutorial explains how to use those two and also how to integrate them with Caffeine, a popular caching library.

Using CacheMono

Using CacheMono basically consists of three steps. The first one is looking up the value from the source based on the given key. The second step is handling cache missing, which will be done if the first step results in a cache miss. The last step is writing the value to the source in case of cache miss.

There are different ways to use CacheMono. One of which requires you to handle all the steps above (lookup value, handle cache misses, write value to the cache) manually. Alternatively, you can also provide a Map and let Project Reactor handle the lookup and write value to the cache – you only need to handle cache misses.

Manually Handle Lookup and Write

Let's start with the first way in which you need to handle lookup and write data to the cache manually. First, you need to handle how to retrieve the value from the cache using the below lookup method.

  public static <KEY, VALUE> MonoCacheBuilderCacheMiss<KEY, VALUE> lookup(Function<KEY, Mono<Signal<? extends VALUE>>> reader, KEY key);

It requires you to pass a Function as the first argument. The passed Function needs to accept a key as the parameter and returns a Mono. So, you need to pass a function which is responsible for retrieving a value based on the given key. You can use any source to store the value of each key. For example, you can use Reactor's Context, Map, Tree, or any data structure. For the second argument, you need to pass the key of the value to be retrieved.

Using CacheMono also requires you to handle cases when the given key cannot be found in the cache, usually known as cache miss. The return type of the first lookup method is MonoCacheBuilderCacheMiss. You can use one of its onCacheMissResume methods to handle cache misses.

  MonoCacheBuilderCacheWriter<KEY, VALUE> onCacheMissResume(Supplier<Mono<VALUE>> otherSupplier);
  MonoCacheBuilderCacheWriter<KEY, VALUE> onCacheMissResume(Mono<VALUE> other);

There are two onCacheMissResume variants. The first one requires you to pass a Supplier that returns a Mono. It can be used if you don't need to pass any argument for generating the value. However, if you need to pass an argument (usually the key) for generating the value, you should use the variant that accepts a Mono as the argument.

Another thing you need to handle is writing the data to the cache. The MonoCacheBuilderCacheWriter class has a method called andWriteWith. You need to call it and pass a BiFunction that writes the value returned by onCacheMissResume to the cache. The andWriteWith method is only called on cache misses.

  Mono<VALUE> andWriteWith(BiFunction<KEY, Signal<? extends VALUE>, Mono<Void>> writer)

With the above explanation, below is an example of how to use CacheMono using the above lookup method. In the example below, we are going to store the values in a Map<String, String>.

  final Map<String, String> mapStringCache = new HashMap<>();

Below are the methods that can be passed as onCacheMissResume argument. The first one (with 0 parmeter) can be passed as a Supplier, while the second one can be passed as a Mono.

  private Mono<String> handleCacheMiss() {
    System.out.println("Cache miss!");

    return Mono.just(ZonedDateTime.now().toString());
  }

  private Mono<String> handleCacheMiss(String key) {
    System.out.println("Cache miss!");

    return Mono.just(key + ": " + Instant.now().toString());
  }

The code below is a complete chain that uses the lookup, onCacheMissResume, and andWriteWith methods.

  final Mono<String> cachedMono1 = CacheMono
      .lookup(
          k -> Mono.justOrEmpty(mapStringCache.get(key)).map(Signal::next),
          key
      )
//        .onCacheMissResume(this::handleCacheMiss) // Uncomment this if you want to pass a Supplier
      .onCacheMissResume(this.handleCacheMiss(key))
      .andWriteWith((k, sig) -> Mono.fromRunnable(() ->
          mapStringCache.put(k, Objects.requireNonNull(sig.get()))
      ));

Provide a Map

Another way to use CacheMono is by providing a Map. Using this way requires you to use one of the lookup methods that accepts a Map.

  public static <KEY, VALUE> MonoCacheBuilderMapMiss<VALUE> lookup(Map<KEY, ? super Signal<? extends VALUE>> cacheMap, KEY key);
  public static <KEY, VALUE> MonoCacheBuilderMapMiss<VALUE> lookup(Map<KEY, ? super Signal<? extends VALUE>> cacheMap, KEY key, Class<VALUE> valueClass);

The first method requires you to pass a Map as the first argument and a key as the second argument. The key type of the Map must be compatible with the type of the passed key. The Map's value type must be a Signal<T>. If you want to use the first method, you have to be able to provide the cache data representation in a Map<KEY, ? super Signal<? extends VALUE>>. That means you can store any type of Signal including next, complete, and error.

You also need to handle cache misses. The MonoCacheBuilderMapMiss also has onCacheMissResume methods, as shown below. One of which accepts a Supplier and the other accepts a Mono. Below are the methods.

  Mono<VALUE> onCacheMissResume(Supplier<Mono<VALUE>> otherSupplier)
  Mono<VALUE> onCacheMissResume(Mono<VALUE> other)

If a given key doesn't exist in the Map, the onCacheMissResume method will be invoked. Unlike the previous lookup method (which doesn't use Map), the returned value will be stored to the Map cache automatically. Therefore, it doesn't provide andWriteWith method and you don't need to manually save the value to the cache.

Let's start with the example of using the first lookup method (the one with two parameters). First, you need to provide a Map whose value type is Signal<? extends String>.

  final Map<String, Signal<? extends String>> mapStringSignalCache = new HashMap<>();

Below is the usage example.

  final Mono<String> cachedMono2 = CacheMono
      .lookup(mapStringSignalCache, key)
//      .onCacheMissResume(this::handleCacheMiss) // Uncomment this if you want to pass a Supplier
      .onCacheMissResume(this.handleCacheMiss(key));

The second method (the one with three parameters) is similar to the first one. The difference is it accepts a third argument whose type is Class<VALUE> that indicates the generic class of the resulting Mono. You can use this method if you want to cast the cached signal value to a given type (must be a subtype of the signal value type).

For the second lookup method, we are going to create another Map whose type value is Signal<?>.

  final Map<String, Signal<? extends Object>> mapObjectSignalCache = new HashMap<>();

Below is the usage example which passes String.class as the third argument of the lookup method. As a result the value is casted to String. Be careful as it may throw ClassCastException if the value cannot be casted to the given class.

  final Mono<String> cachedMono3 = CacheMono
      .lookup(mapObjectSignalCache, key, String.class)
//      .onCacheMissResume(this::handleCacheMiss) // Uncomment this if you want to pass a Supplier
      .onCacheMissResume(this.handleCacheMiss(key));

Using CacheFlux

The usage of CacheFlux is similar to CacheMono. You need to handle how to data lookup from cache, handle cache misses, and write data to the cache. The main difference is you need to work with a list of values or Signals. With CacheFlux, you can also choose whether to manually handle the lookup and write process or provide a Map, depending on the used lookup method.

Manually Handle Lookup and Write

The first way is to manually handle lookup and write values to the cache, using the below lookup method.

  public static <KEY, VALUE> FluxCacheBuilderCacheMiss<KEY, VALUE> lookup(
      Function<KEY, Mono<List<Signal<VALUE>>>> reader,
      KEY key
  )

You need to pass a function that accepts a key as the argument. Inside the passed function, you need to obtain the values from the cache based on the given key and return it as a Mono of List of Signal (Mono<List<Signal<VALUE>>>). If the key doesn't exist in the cache, you have to return an empty Mono.

Next, you have to handle how to generate values on cache misses. The FluxCacheBuilderCacheMiss class has two methods named onCacheMissResume. You can choose to pass a Flux or a Supplier. The former should be used if you need to generate the value based on the given key.

  FluxCacheBuilderCacheWriter<KEY, VALUE> onCacheMissResume(Supplier<Flux<VALUE>> otherSupplier);
  FluxCacheBuilderCacheWriter<KEY, VALUE> onCacheMissResume(Flux<VALUE> other);

Lastly, you need to handle how to store the data generated by <onCacheMissResume method by using FluxCacheBuilderCacheMiss's onCacheMissResume method.

  Flux<VALUE> andWriteWith(BiFunction<KEY, List<Signal<VALUE>>, Mono<Void>> writer);

Let's start with the example. This time, we have a Map whose key type is Integer and value type is List<Integer>.

  final Map<Integer, List<Integer>> mapIntCache = new HashMap<>();

Below are the methods that can be passed as onCacheMissResume argument. The first one (with 0 parmeter) can be passed as a Supplier, while the other can be passed as a Mono.

  private Flux<Integer> handleCacheMiss() {
    System.out.println("Cache miss!");
    final List<Integer> values = new ArrayList<>();

    for (int i = 1; i <= 5; i++) {
      values.add(i);
    }

    return Flux.fromIterable(values);
  }

  private Flux<Integer> handleCacheMiss(Integer key) {
    System.out.println("Cache miss!");
    final List<Integer> values = new ArrayList<>();

    for (int i = 1; i <= 5; i++) {
      values.add(i * key);
    }

    return Flux.fromIterable(values);
  }

Below is a complete chain that uses the lookup, onCacheMissResume, and andWriteWith methods.

  final Flux<Integer> cachedFlux1 = CacheFlux
    .lookup(
      k -> {
        if (mapIntCache.get(k) != null) {
        Mono<List<Signal<Integer>>> res = Flux.fromIterable(mapIntCache.get(k))
          .map(Signal::next)
          .collectList();

        return res;
        } else {
        return Mono.empty();
        }
      },
      key
    )
    .onCacheMissResume(this::handleCacheMiss) // Uncomment this if you want to pass a Supplier
//    .onCacheMissResume(() -> Flux.defer(() -> this.handleCacheMiss(key)))
    .andWriteWith((k, sig) -> Mono.fromRunnable(() ->
      mapCache.put(
        k,
        sig.stream()
          .filter(signal -> signal.getType() == SignalType.ON_NEXT)
          .map(Signal::get)
          .collect(Collectors.toList())
      )
    ));

Provide a Map

Another way to use CacheFlux is by passing a Map. CacheFlux has another static lookup method that allows you to pass a Map.

  public static <KEY, VALUE> FluxCacheBuilderMapMiss<VALUE> lookup(
      Map<KEY, ? super List> cacheMap,
      KEY key,
      Class<VALUE> valueClass
  )

The Map has to be passed as the first argument. The key type of the Map must be compatible with the type of the key passed as the second argument. The Map's value type must be a List or another type that extends a List. Unfortunately, you cannot define a generic type for the List. However, it doesn't mean you can pass any value as the element of the List. The List can only contain Project Reactor's Signal. For the third argument, you have to pass a Class which is used to cast each Flux element.

Then, you need to handle cache misses by using one of the onCacheMissResume methods. One of the methods requires you to pass a Supplier, while the other requires you to pass a Flux. You should use the latter if you need to generate the values based on the given key. When a cache miss occurs, the onCacehMissResume method will be called and the resulting values will be stored to the Map automatically.

  Flux<VALUE> onCacheMissResume(Supplier<Flux<VALUE>> otherSupplier);
  Flux<VALUE> onCacheMissResume(Flux<VALUE> other);

To use CacheFlux by providing a Map, you need to have a Map whose value type is List.

  final Map<Integer, List> mapCache = new HashMap<>();

Below is the usage example.

  final Flux<Integer> cachedFlux2 = CacheFlux
    .lookup(
      mapCache,
      key,
      Integer.class
    )
    .onCacheMissResume(this::handleCacheMiss);
//    .onCacheMissResume(Flux.defer(() -> this.handleCacheMiss(key)));

  return cachedFlux2
    .doOnNext(res -> System.out.println("Value is " + res));

Using CacheMono and CacheFlux with Caffeine

If you need more advanced features for caching such as expiration time, most likely you'll use a cache library that provides the features you need. The CacheMono and CacheFlux can be used with any caching library, such as Caffeine. This tutorial doesn't explain how to use Caffeine in detail, as it will be very long to explain it. We only focus on how to use it with CacheMono and CacheFlux. First of all, we need to create a Caffeine cache. Caffeine has some classes for creating caches, such as Cache, AsyncCache, and LoadingCache. In this example, we are going to use the Cache class.

  final Cache<String, String> caffeineCache = Caffeine.newBuilder()
      .expireAfterWrite(Duration.ofSeconds(30))
      .recordStats()
      .build();

As I have explained above, to use CacheMono, you can provide a Map whose value type is Reactor's Signal. If not possible, you need to pass a Function for looking up the value and handle write data to the cache manually. Caffeine has a method for converting the cache into a Map, but the value type is not a Signal, which means it's not compatible with the lookup methods that accept a Map parameter. Therefore, you need to handle the lookup by passing a Function and store the generated values to the Caffeine cache.

  final Mono<String> cachedMonoCaffeine = CacheMono
      .lookup(
          k -> Mono.justOrEmpty(caffeineCache.getIfPresent(k)).map(Signal::next),
          key
      )
  //    .onCacheMissResume(this::handleCacheMiss) // Uncomment this if you want to pass a Supplier
      .onCacheMissResume(this.handleCacheMiss(key))
      .andWriteWith((k, sig) -> Mono.fromRunnable(() ->
          caffeineCache.put(k, Objects.requireNonNull(sig.get()))
      ));

The usage for CaceFlux is also similar. Below is another Caffeine cache whose value type is List<Integer>.

  final Cache<Integer, List<Integer>> caffeineCache = Caffeine.newBuilder()
      .expireAfterWrite(Duration.ofSeconds(30))
      .recordStats()
      .build();

To use Caffeine cache with CacheFlux, you need to use the lookup method that accepts a Function as the first parameter. The passed Function is responsible to get the value from the cache or return an empty Mono if the key is not present. You also need to store the values to the Caffeine cache.

  final Flux<Integer> cachedFluxCaffeine = CacheFlux
      .lookup(
          k -> {
            final List<Integer> cached = caffeineCache.getIfPresent(k);

            if (cached == null) {
              return Mono.empty();
            }

            return Mono.just(cached)
                .flatMapMany(Flux::fromIterable)
                .map(Signal::next)
                .collectList();
          },
          key
      )
//        .onCacheMissResume(this::handleCacheMiss) // Uncomment this if you want to pass a Supplier
      .onCacheMissResume(this.handleCacheMiss(key))
      .andWriteWith((k, sig) -> Mono.fromRunnable(() ->
          caffeineCache.put(
              k,
              sig.stream()
                  .filter(signal -> signal.getType() == SignalType.ON_NEXT)
                  .map(Signal::get)
                  .collect(Collectors.toList())
          )
      ));

Summary

That's how to use CacheMono and CacheFlux in Project Reactor. Basically, there are two options: handle lookup and store values manually or provide a compatible Map whose value type is a Signal (for CacheMono) or List<Signal> (for CacheFlux). The latter option is preferred if possible because it's simpler. CacheMono and CacheFlux can also be used with any caching library such as Caffeine. The full code of this tutorial is available on GitHub.

===== КОНЕЦ САЙТА https://www.woolha.com/tutorials/project-reactor-cachemono-cacheflux-with-caffeine-examples ====== ===== НАЧАЛО САЙТА https://bigpicture.ru/dobrye-kotoskazki-xudozhnika-aleksandra-maskaeva/ ====== Добрые котосказки художника Александра Маскаева » BigPicture.ru

Добрые котосказки художника Александра Маскаева

0

Картины талантливого художника Александра Маскаева — это волшебный мир сказочных персонажей и добрых котеек. Рассматривая котоистории, невольно погружаешься в мурлычущую, пушистую и бесконечно добрую атмосферу. Стоит заметить, что каждая работа мастера помимо явного смысла несет скрытый подтекст, заметный не сразу.

Фотография: Добрые котосказки художника Александра Маскаева №1 - BigPicture.ru

Фотография: Добрые котосказки художника Александра Маскаева №2 - BigPicture.ru
1. Чужестранка
Фотография: Добрые котосказки художника Александра Маскаева №3 - BigPicture.ru
2. Карусель
Фотография: Добрые котосказки художника Александра Маскаева №4 - BigPicture.ru
3. Выпал снег
Фотография: Добрые котосказки художника Александра Маскаева №5 - BigPicture.ru
4. Купание красного кота
Фотография: Добрые котосказки художника Александра Маскаева №6 - BigPicture.ru
5. Путь самурая
Фотография: Добрые котосказки художника Александра Маскаева №7 - BigPicture.ru
6. Охотник, стремящийся на привал
Фотография: Добрые котосказки художника Александра Маскаева №8 - BigPicture.ru
7. Коты на привале
Фотография: Добрые котосказки художника Александра Маскаева №9 - BigPicture.ru
8. Бабушкин чулан
Фотография: Добрые котосказки художника Александра Маскаева №10 - BigPicture.ru
9. У домового
Фотография: Добрые котосказки художника Александра Маскаева №11 - BigPicture.ru
10. Поющие не в терновнике
Фотография: Добрые котосказки художника Александра Маскаева №12 - BigPicture.ru
11. В мастерской (снова черный квадрат)
Фотография: Добрые котосказки художника Александра Маскаева №13 - BigPicture.ru
12. Свадьба
Фотография: Добрые котосказки художника Александра Маскаева №14 - BigPicture.ru
13. В мастерской
Фотография: Добрые котосказки художника Александра Маскаева №15 - BigPicture.ru
14. Жизнь — это…
Фотография: Добрые котосказки художника Александра Маскаева №16 - BigPicture.ru
15. Похоже, что стрелок-то я неважный…
Фотография: Добрые котосказки художника Александра Маскаева №17 - BigPicture.ru
16. Яшка-артиллерист, или Бац, бац и мимо…
Фотография: Добрые котосказки художника Александра Маскаева №18 - BigPicture.ru
17. Умаялись
Фотография: Добрые котосказки художника Александра Маскаева №19 - BigPicture.ru
18. Ночь прошла
Фотография: Добрые котосказки художника Александра Маскаева №20 - BigPicture.ru
19. Перед рыбалкой
Фотография: Добрые котосказки художника Александра Маскаева №21 - BigPicture.ru
20. На рыбалке
Фотография: Добрые котосказки художника Александра Маскаева №22 - BigPicture.ru
21. Поймали?!
Фотография: Добрые котосказки художника Александра Маскаева №23 - BigPicture.ru
22. Кот-оркестр
Фотография: Добрые котосказки художника Александра Маскаева №24 - BigPicture.ru
23. Земля!
Фотография: Добрые котосказки художника Александра Маскаева №25 - BigPicture.ru
24. Я не волшебник — я только учусь…
Фотография: Добрые котосказки художника Александра Маскаева №26 - BigPicture.ru
25. Бабушкины сказки
Фотография: Добрые котосказки художника Александра Маскаева №27 - BigPicture.ru
26. Дедушкины сказки
Фотография: Добрые котосказки художника Александра Маскаева №28 - BigPicture.ru
27. Именины
Фотография: Добрые котосказки художника Александра Маскаева №29 - BigPicture.ru
28. А утюг-то я выключил?
Фотография: Добрые котосказки художника Александра Маскаева №30 - BigPicture.ru
29. И семь гномов
Фотография: Добрые котосказки художника Александра Маскаева №31 - BigPicture.ru
30. Кукольник
Фотография: Добрые котосказки художника Александра Маскаева №32 - BigPicture.ru
31. Поутру
Фотография: Добрые котосказки художника Александра Маскаева №33 - BigPicture.ru
32. Я ж говорил, что лезть надо через печную трубу…
Фотография: Добрые котосказки художника Александра Маскаева №34 - BigPicture.ru
33. Привал
Фотография: Добрые котосказки художника Александра Маскаева №35 - BigPicture.ru
34. Ух ты…
Фотография: Добрые котосказки художника Александра Маскаева №36 - BigPicture.ru
35. Слушайте
Фотография: Добрые котосказки художника Александра Маскаева №37 - BigPicture.ru
36. Сейчас всем будет горько
Фотография: Добрые котосказки художника Александра Маскаева №38 - BigPicture.ru
37. Потерпите, ребята (последний снег…)
Фотография: Добрые котосказки художника Александра Маскаева №39 - BigPicture.ru
38. Повезло-то как…
Фотография: Добрые котосказки художника Александра Маскаева №40 - BigPicture.ru
39. Смотри в оба
Фотография: Добрые котосказки художника Александра Маскаева №41 - BigPicture.ru
40. Особенности рыбалки…
Фотография: Добрые котосказки художника Александра Маскаева №42 - BigPicture.ru
41. Ой, боюсь… (после праздников хорошо)
Фотография: Добрые котосказки художника Александра Маскаева №43 - BigPicture.ru
42. Клады
Фотография: Добрые котосказки художника Александра Маскаева №44 - BigPicture.ru
43. Кот и шарманщик
Фотография: Добрые котосказки художника Александра Маскаева №45 - BigPicture.ru
44. Канары отдыхают
Фотография: Добрые котосказки художника Александра Маскаева №46 - BigPicture.ru
45. Доброе утро
Фотография: Добрые котосказки художника Александра Маскаева №47 - BigPicture.ru
46. Во кузнице
Фотография: Добрые котосказки художника Александра Маскаева №48 - BigPicture.ru
47. В гостях
Фотография: Добрые котосказки художника Александра Маскаева №49 - BigPicture.ru
48. А теперь на полок…
Фотография: Добрые котосказки художника Александра Маскаева №50 - BigPicture.ru
49. А потом Канары…
Фотография: Добрые котосказки художника Александра Маскаева №51 - BigPicture.ru
50. Та еще азбука…
Фотография: Добрые котосказки художника Александра Маскаева №52 - BigPicture.ru
51. Именины домового
Фотография: Добрые котосказки художника Александра Маскаева №53 - BigPicture.ru
52. День водяного
Фотография: Добрые котосказки художника Александра Маскаева №54 - BigPicture.ru
53. Волшебный клубок
Фотография: Добрые котосказки художника Александра Маскаева №55 - BigPicture.ru
54. Вечерок
Фотография: Добрые котосказки художника Александра Маскаева №56 - BigPicture.ru
55. Деньги любят счет
Фотография: Добрые котосказки художника Александра Маскаева №57 - BigPicture.ru
56. Кот-баюн
Фотография: Добрые котосказки художника Александра Маскаева №58 - BigPicture.ru
57. Грустный домовенок
Фотография: Добрые котосказки художника Александра Маскаева №59 - BigPicture.ru
58. Грусть
Фотография: Добрые котосказки художника Александра Маскаева №60 - BigPicture.ru
59. С наступающим Новым годом!
Фотография: Добрые котосказки художника Александра Маскаева №61 - BigPicture.ru
60. И жили они долго и счастливо

Смотрите также: Все начинается с медведя: художник дорисовывал каждый день по одному персонажу, и вот что получилось через 19 дней

А вы знали, что у нас есть Telegram и Instagram?

Подписывайтесь, если вы ценитель красивых фото и интересных историй!

Популярное

Самые горячие темы

Почему евреи определяют национальность по матери

Почему евреи определяют национальность по матери

Кто такие американские шерифы и почему они не относятся к полиции

Кто такие американские шерифы и почему они не относятся к полиции

20 фотографий из серии «Слава Богу, показалось…»

20 фотографий из серии «Слава Богу, показалось…»

Новости партнеров

Новые посты

15 очаровательных животных, которые наслаждаются ароматом цветов

15 очаровательных животных, которые наслаждаются ароматом цветов

Ешь ананасы, рябчиков жуй: как отдыхали в советских и американских ресторанах по разные стороны «железного занавеса» в 60-е годы

Ешь ананасы, рябчиков жуй: как отдыхали в советских и американских ресторанах по разные стороны «железного занавеса» в 60-е годы

7 самых милых животных с острова Хоккайдо

7 самых милых животных с острова Хоккайдо

Тайна смерти актрисы Инны Бурдученко — заговор врагов или банальная халатность?

Тайна смерти актрисы Инны Бурдученко — заговор врагов или банальная халатность?

Почему в США так популярно обрезание? И дело вовсе не в гигиене или религии

Почему в США так популярно обрезание? И дело вовсе не в гигиене или религии

25 примеров необычной мебели, которая вызывает смех и восхищение в соцсетях

25 примеров необычной мебели, которая вызывает смех и восхищение в соцсетях

Что граждане СССР могли купить за 10 копеек

Что граждане СССР могли купить за 10 копеек

В Токио работает клуб, где мужчины могут побороться с девушками

В Токио работает клуб, где мужчины могут побороться с девушками

Санкции городских властей против голубей: чем птица мира насолила людям

Санкции городских властей против голубей: чем птица мира насолила людям

10 источников аллергии в вашем доме

10 источников аллергии в вашем доме

15 фотографий, которые сделают ваш день чуточку лучше

15 фотографий, которые сделают ваш день чуточку лучше

Тяп, ляп и готово: 22 фото о том, что бывает, когда руки растут не из того места

Тяп, ляп и готово: 22 фото о том, что бывает, когда руки растут не из того места

===== КОНЕЦ САЙТА https://bigpicture.ru/dobrye-kotoskazki-xudozhnika-aleksandra-maskaeva/ ====== ===== НАЧАЛО САЙТА https://bigpicture.ru/stalnoe-ocharovanie-dani-jell-shpigel/ ====== Стальное очарование Дани Элль Шпигель » BigPicture.ru

Стальное очарование Дани Элль Шпигель

0

Американская модель Дани Элль Шпигель (Dani Elle Speegle) живет в штате Колорадо. Эту девушку хорошо знают в США и за их пределами, благодаря ее регулярному участию в разных спортивных шоу. Дани не просто выступает — она часто побеждает, получая солидные призовые. Также она сотрудничает со многими спортивными брендами, рекламируя их продукцию.

Bigpicture.ru модель Дани Элль Шпигель (Dani Elle Speegle)

Дани Элль Шпигель — звезда спортивных телешоу, тренер по кроссфиту, гимнастка, блогер и модель. А еще она миллионер, так как по самым скромным подсчетам она заработала 3 млн. долларов (243 млн. рублей). Из спортивных достижений девушки стоит отметить победу в шоу Titan Games 2020, которое проходит под эгидой Дуэйна Джонсона. И это все в 29 лет!

Bigpicture.ru модель Дани Элль Шпигель (Dani Elle Speegle)

Но успех Шпигель — это не череда удачных совпадений. Эта девушка много и тяжело тренируется, чтобы быть лучшей. Каждый день она проводит в спортивном зале не менее 2 часов и в ее графике не бывает выходных дней.

Bigpicture.ru модель Дани Элль Шпигель (Dani Elle Speegle)

Старания Дани Элль Шпигель не напрасны. Девушка всегда в прекрасной форме, о чем говорят ее фото в социальных сетях. Некоторые считают ее не слишком женственной, но Дани из-за этого не переживает. Ей нравится то, что она делает, и ее деятельность приносит отличный доход.

Bigpicture.ru модель Дани Элль Шпигель (Dani Elle Speegle)speegle bikini shot 1

Несмотря на высокую загруженность тренировками и выступлениями, Дани немало путешествует. В ее аккаунте в инстаграме множество снимков из самых экзотических уголков планеты. Модель обожает море и большинство ее неспортивных фото сделаны на пляже.

Bigpicture.ru модель Дани Элль Шпигель (Dani Elle Speegle)speegle

Bigpicture.ru модель Дани Элль Шпигель (Dani Elle Speegle)

Bigpicture.ru модель Дани Элль Шпигель (Dani Elle Speegle)

Bigpicture.ru модель Дани Элль Шпигель (Dani Elle Speegle)1384762855256351 561413714201372134 n

Bigpicture.ru модель Дани Элль Шпигель (Dani Elle Speegle)1349121545487149 9152355873752188820 n

Bigpicture.ru модель Дани Элль Шпигель (Dani Elle Speegle)1339004016498902 7232913656221620041 n

Bigpicture.ru модель Дани Элль Шпигель (Dani Elle Speegle)

Bigpicture.ru модель Дани Элль Шпигель (Dani Elle Speegle)speegle 8

Bigpicture.ru модель Дани Элль Шпигель (Dani Elle Speegle)

Bigpicture.ru модель Дани Элль Шпигель (Dani Elle Speegle)

Bigpicture.ru модель Дани Элль Шпигель (Dani Elle Speegle)elle speegle 471b8act5l 1080x1355

Смотрите также — Рестлер и модель Аманда Саккоманно — милая хулиганка, сокрушающая столы и соперниц

А вы знали, что у нас есть Telegram и Instagram?

Подписывайтесь, если вы ценитель красивых фото и интересных историй!

Популярное

Самые горячие темы

Почему евреи определяют национальность по матери

Почему евреи определяют национальность по матери

Кто такие американские шерифы и почему они не относятся к полиции

Кто такие американские шерифы и почему они не относятся к полиции

20 фотографий из серии «Слава Богу, показалось…»

20 фотографий из серии «Слава Богу, показалось…»

Новости партнеров

Новые посты

Тайны «Эммануэль»: триумф, жизнь и смерть Сильвии Кристель

Тайны «Эммануэль»: триумф, жизнь и смерть Сильвии Кристель

5 основных ролей, которые играют в отношениях влюбленные женщины

5 основных ролей, которые играют в отношениях влюбленные женщины

Краткое пособие для отпускниц

Краткое пособие для отпускниц

Трагическая судьба Нима Чимпского, или Можно ли из обезьяны сделать человека

Трагическая судьба Нима Чимпского, или Можно ли из обезьяны сделать человека

5 полезных советов для летних тренировок

5 полезных советов для летних тренировок

15 очаровательных животных, которые наслаждаются ароматом цветов

15 очаровательных животных, которые наслаждаются ароматом цветов

Ешь ананасы, рябчиков жуй: как отдыхали в советских и американских ресторанах по разные стороны «железного занавеса» в 60-е годы

Ешь ананасы, рябчиков жуй: как отдыхали в советских и американских ресторанах по разные стороны «железного занавеса» в 60-е годы

7 самых милых животных с острова Хоккайдо

7 самых милых животных с острова Хоккайдо

Тайна смерти актрисы Инны Бурдученко — заговор врагов или банальная халатность?

Тайна смерти актрисы Инны Бурдученко — заговор врагов или банальная халатность?

Почему в США так популярно обрезание? И дело вовсе не в гигиене или религии

Почему в США так популярно обрезание? И дело вовсе не в гигиене или религии

25 примеров необычной мебели, которая вызывает смех и восхищение в соцсетях

25 примеров необычной мебели, которая вызывает смех и восхищение в соцсетях

Что граждане СССР могли купить за 10 копеек

Что граждане СССР могли купить за 10 копеек

===== КОНЕЦ САЙТА https://bigpicture.ru/stalnoe-ocharovanie-dani-jell-shpigel/ ====== ===== НАЧАЛО САЙТА https://nickolasfisher.com/blog/InMemory-Caching-in-Sprint-Boot-WebfluxProject-Reactor ====== In-Memory Caching in Sprint Boot Webflux/Project Reactor

"After all, the engineers only needed to refuse to fix anything, and modern industry would grind to a halt." -Michael Lewis

Enable Massive Growth

In-Memory Caching in Sprint Boot Webflux/Project Reactor

Oct 2020

Sample code for this article can be found on Github.

In memory caching can significantly improve performance in a microservices environment, usually because of the tail latency involved in calling downstream services. Caching can also help with resilience, though the extent to which that matters will depend on how you're actually leveraging that caching. There are two flavors of caching that you're like to want to use, the first is using the Mono as a hot source [which is demonstrated here], and the second would be when you want to selectively cache individual key/value pairs.

Caching in reactor when using a Mono as a hot source is pretty straightforward, but there is one gotcha. I will demonstrate how to cache, and also how to write automated tests for that caching behavior, in this post.

The App

We're going to leverage some work done in a previous post here. Let's recall that we had a service that would retry on any timeout downstream:

@Service
public class RetryService {
    private final WebClient serviceAWebClient;

    public RetryService(@Qualifier("service-a-web-client") WebClient serviceAWebClient) {
        this.serviceAWebClient = serviceAWebClient;
    }

    public Mono<WelcomeMessage> getWelcomeMessageAndHandleTimeout(String locale) {
        return this.serviceAWebClient.get()
                .uri(uriBuilder -> uriBuilder.path("/locale/{locale}/message").build(locale))
                .retrieve()
                .bodyToMono(WelcomeMessage.class)
                .retryWhen(
                    Retry.backoff(2, Duration.ofMillis(25))
                            .filter(throwable -> throwable instanceof TimeoutException)
                );
    }
}

Let's say for the sake of this article that the business requirements allow us to cache a welcome message that is in English for about five minutes. There is no hard requirement on welcome messages being updated immediately. Now that we already have resilience around timeouts, let's also add a cache on a successful response by creating a decorator. Because this is a tutorial, we're going to call that decorator service CachingService:

@Service
public class CachingService {

    private final RetryService retryService;

    public CachingService(RetryService retryService) {
        this.retryService = retryService;
    }

    public Mono<WelcomeMessage> getEnglishLocaleWelcomeMessage() {
        return this.retryService.getWelcomeMessageAndHandleTimeout("en_US");
    }
}

This service currently just proxies directly to the RetryService and doesn't do anything remarkable. We're now going to add a test that verifies that the cache is working:

public class CachingServiceIT {

    @Test
    public void englishLocaleWelcomMessage_caches() {
        RetryService mockRetryService = Mockito.mock(RetryService.class);

        AtomicInteger counter = new AtomicInteger();
        Mockito.when(mockRetryService.getWelcomeMessageAndHandleTimeout("en_US"))
                .thenReturn(Mono.defer(() ->
                            Mono.just(new WelcomeMessage("count " + counter.incrementAndGet()))
                        )
                );

        CachingService cachingService = new CachingService(mockRetryService);

        StepVerifier.create(cachingService.getEnglishLocaleWelcomeMessage())
                .expectNextMatches(welcomeMessage -> "count 1".equals(welcomeMessage.getMessage()))
                .verifyComplete();

        StepVerifier.create(cachingService.getEnglishLocaleWelcomeMessage())
                .expectNextMatches(welcomeMessage -> "count 1".equals(welcomeMessage.getMessage()))
                .verifyComplete();
    }
}

This test defers to a Supplier to return a Mono on demand. Every time this mono is subscribed to, it will call our Supplier. Under the covers, our Supplier will return basically just a count of the number of times it has been invoked.

One way to get this test to pass is to just call one of the cache methods on Mono. This is one of the easiest:

@Service
public class CachingService {

    private final RetryService retryService;
    private final Mono<WelcomeMessage> cachedEnglishWelcomeMono;

    public CachingService(RetryService retryService) {
        this.retryService = retryService;
        this.cachedEnglishWelcomeMono = this.fallbackService.getWelcomeMessageAndHandleTimeout("en_US")
                .cache(Duration.ofMinutes(5));
    }

    public Mono<WelcomeMessage> getEnglishLocaleWelcomeMessage() {
        return cachedEnglishWelcomeMono;
    }
}

Now the test passes, but there is a fatal flaw with this approach: it also caches errors. So, if the RetryService ends up timing out too many times, or fails for some other reason, then we will have our CachingService constantly emitting that error for five minutes. This is almost always bad and I wish this wasn't the interface, but it is.

To demonstrate this in action, I'll write another test to target that:

    @Test
    public void cachesSuccessOnly() {
        RetryService mockRetryService = Mockito.mock(RetryService.class);

        AtomicInteger counter = new AtomicInteger();
        Mockito.when(mockRetryService.getWelcomeMessageAndHandleTimeout("en_US"))
                .thenReturn(Mono.defer(() -> {
                            if (counter.incrementAndGet() > 1) {
                                return Mono.just(new WelcomeMessage("count " + counter.get()));
                            } else {
                                return Mono.error(new RuntimeException());
                            }
                        })
                );

        CachingService cachingService = new CachingService(mockRetryService);

        StepVerifier.create(cachingService.getEnglishLocaleWelcomeMessage())
                .expectError()
                .verify();

        StepVerifier.create(cachingService.getEnglishLocaleWelcomeMessage())
                .expectNextMatches(welcomeMessage -> "count 2".equals(welcomeMessage.getMessage()))
                .verifyComplete();

        // previous result should be cached
        StepVerifier.create(cachingService.getEnglishLocaleWelcomeMessage())
                .expectNextMatches(welcomeMessage -> "count 2".equals(welcomeMessage.getMessage()))
                .verifyComplete();
    }

You will see this fail, because it will cache the error and keep emitting it. To fix that, there is a golden cache override on our Mono that allows us to specify the duration of which each type of response is cached:

@Service
public class CachingService {

    private final RetryService retryService;
    private final Mono<WelcomeMessage> cachedEnglishWelcomeMono;

    public CachingService(RetryService retryService) {
        this.retryService = retryService;
        this.cachedEnglishWelcomeMono = this.retryService.getWelcomeMessageAndHandleTimeout("en_US")
                .cache(welcomeMessage -> Duration.ofMinutes(5),
                        throwable -> Duration.ZERO,
                        () -> Duration.ZERO
                );
    }

    public Mono<WelcomeMessage> getEnglishLocaleWelcomeMessage() {
        return cachedEnglishWelcomeMono;
    }
}

Now if we run our tests again, both of them pass. By passing in Duration.ZERO, we don't cache errors or empty Monos at all, only the successful one, for five minutes.

Remember to checkout the source code on Github.

Nick Fisher is a software engineer in the Pacific Northwest. He focuses on building highly scalable and maintainable backend systems.

===== КОНЕЦ САЙТА https://nickolasfisher.com/blog/InMemory-Caching-in-Sprint-Boot-WebfluxProject-Reactor ====== ===== НАЧАЛО САЙТА https://bigpicture.ru/rabotaem-i-hudeem-5-sovetov-po-borbe-s-lishnim-vesom-v-ofise/ ====== 5 советов по борьбе с лишним весом в офисе » BigPicture.ru

Работаем и худеем: 5 советов по борьбе с лишним весом в офисе

0

На работе современный человек проводит немало времени и посвящает его целиком и полностью своему работодателю. Но можно извлечь из этих 8-12 часов дополнительную выгоду для себя, не заключающуюся в денежных знаках. Мы предлагаем вам 5 советов, помогающих использовать рабочее время для похудения!

Фотография: Работаем и худеем: 5 советов по борьбе с лишним весом в офисе №1 - BigPicture.ru

Когда мы планируем сесть на диету или изменить пищевые привычки, то смело добавляем нововведения в повседневную жизнь. Но, как ни странно, при этом часто забываем о своей второй жизни — офисной. Это неправильно, так как работа занимает значительную часть нашей жизни и поэтому о того, как будут организованы наши диетические привычки на работе, во многом зависит успех борьбы с лишними килограммами. Наши советы помогут вам не сорваться и завершить начатые изменения в жизни.

Держите стресс под контролем

Фотография: Работаем и худеем: 5 советов по борьбе с лишним весом в офисе №2 - BigPicture.ru

Ученые давно уже установили, что в стрессовых ситуациях наш организм вырабатывает гормон кортизол, замедляющий метаболизм. Он приостанавливает превращение жира в энергию и способствует его накоплению там, где он меньше всего нам нужен. Организм рассуждает так — если вокруг все так плохо, то нужно делать запасы на трудные времена.

Дополнительно способствует набору веса привычка «заедать» проблемы чем-то вкусным, в качестве утешения. Да, это определенно работает и переносить тяготы работы с пирожными и конфетами становится немного легче, но проблемы которые мы при этом получаем гораздо более серьезны. Научитесь расслабляться и не принимать близко к сердцу рабочие моменты — это поможет вам бороться с лишним весом.

Замените кофе на чай

Фотография: Работаем и худеем: 5 советов по борьбе с лишним весом в офисе №3 - BigPicture.ru

Во всем мире кофе — классический «офисный» напиток. Еще бы — приготовить его можно очень быстро, а бодрящий эффект от ароматной жидкости с ударной дозой кофеина ни с чем не сравним. Но специалисты в области здорового питания рекомендуют избавляться от кофейной зависимости и переходить на чай.

Зеленые сорта чая и улун содержат вещества катехины, способствующие повышенному расходу энергии и окислению жиров. Наиболее эффективны катехины в комплексе с кофеином, который в большом количестве присутствует в зеленом чае. Выпивайте в день несколько чаше и мы гарантируем, что очень скоро заметите результат.

Обходите стороной торговые автоматы

Фотография: Работаем и худеем: 5 советов по борьбе с лишним весом в офисе №4 - BigPicture.ru

С точки зрения изящной фигуры вендинговые автоматы — это чистое зло. Их создают очень умные люди, использующие наши слабости и особенно склонность к импульсивным покупкам. Это работает по тому же принципу, что и размещение товаров возле кассы — рука сама тянется взять какую-нибудь вкусную мелочь.

Чтобы уйти от зависимости от торговых автоматов, заранее приготовьте достаточное количество перекусов, разумеется, здоровых. Запаситесь орехами и фруктами, чтобы можно было их съесть, когда в следующий раз появится желание прогуляться к торговому аппарату.

Ходите больше пешком

Фотография: Работаем и худеем: 5 советов по борьбе с лишним весом в офисе №5 - BigPicture.ru

Нет, мы не призываем преодолевать весь путь до работы «на своих двух», хотя если это возможно, то почему бы и нет? Если вы живете далеко от офиса, постарайтесь проделывать пешком хотя бы часть маршрута, например, выходя за пару остановок до места назначения.

После работы старайтесь также максимально обходиться без транспорта — это будет не только отличной кардионагрузкой, но и хорошим способом расслабиться и отвлечься от рабочих проблем. Старайтесь выбирать для возвращения домой приятные места, если получится. Идеальным будет прогулка через парк или тихими улочками без оживленного автомобильного трафика.

Обходитесь без лифта

Фотография: Работаем и худеем: 5 советов по борьбе с лишним весом в офисе №6 - BigPicture.ru

Если вам посчастливилось работать в многоэтажном здании, да еще и перемещаться между этажами во время работы, то грех не использовать эту возможность для похудения. Откажитесь от поездок на лифте, хотя бы в тех случаях, когда нет спешки и вы чувствуете себя бодро. Стоит ли напоминать, что ходьба по ступенькам — это одна из самых эффективных кардионагрузок, которую можно позволить себе, не используя тренажеров.

Смотрите также:
8 безумно вкусных бутербродов, которые можно взять на работу,
Какими были офисы сто лет тому назад,
12 самых крутых офисов в мире

А вы знали, что у нас есть Telegram и Instagram?

Подписывайтесь, если вы ценитель красивых фото и интересных историй!

Популярное

Самые горячие темы

Почему евреи определяют национальность по матери

Почему евреи определяют национальность по матери

Кто такие американские шерифы и почему они не относятся к полиции

Кто такие американские шерифы и почему они не относятся к полиции

20 фотографий из серии «Слава Богу, показалось…»

20 фотографий из серии «Слава Богу, показалось…»

Новости партнеров

Новые посты

5 основных ролей, которые играют в отношениях влюбленные женщины

5 основных ролей, которые играют в отношениях влюбленные женщины

Краткое пособие для отпускниц

Краткое пособие для отпускниц

Трагическая судьба Нима Чимпского, или Можно ли из обезьяны сделать человека

Трагическая судьба Нима Чимпского, или Можно ли из обезьяны сделать человека

5 полезных советов для летних тренировок

5 полезных советов для летних тренировок

15 очаровательных животных, которые наслаждаются ароматом цветов

15 очаровательных животных, которые наслаждаются ароматом цветов

Ешь ананасы, рябчиков жуй: как отдыхали в советских и американских ресторанах по разные стороны «железного занавеса» в 60-е годы

Ешь ананасы, рябчиков жуй: как отдыхали в советских и американских ресторанах по разные стороны «железного занавеса» в 60-е годы

7 самых милых животных с острова Хоккайдо

7 самых милых животных с острова Хоккайдо

Тайна смерти актрисы Инны Бурдученко — заговор врагов или банальная халатность?

Тайна смерти актрисы Инны Бурдученко — заговор врагов или банальная халатность?

Почему в США так популярно обрезание? И дело вовсе не в гигиене или религии

Почему в США так популярно обрезание? И дело вовсе не в гигиене или религии

25 примеров необычной мебели, которая вызывает смех и восхищение в соцсетях

25 примеров необычной мебели, которая вызывает смех и восхищение в соцсетях

Что граждане СССР могли купить за 10 копеек

Что граждане СССР могли купить за 10 копеек

В Токио работает клуб, где мужчины могут побороться с девушками

В Токио работает клуб, где мужчины могут побороться с девушками

===== КОНЕЦ САЙТА https://bigpicture.ru/rabotaem-i-hudeem-5-sovetov-po-borbe-s-lishnim-vesom-v-ofise/ ====== ===== НАЧАЛО САЙТА https://bigpicture.ru/10-stydnyx-kinoscen-o-kotoryx-aktery-predpochli-by-ne-vspominat/ ====== 10 стыдных киносцен, о которых актеры предпочли бы не вспоминать » BigPicture.ru

10 стыдных киносцен, о которых актеры предпочли бы не вспоминать

0

Актеры нередко сожалеют об определенных сценах в своих фильмах. Они соглашаются на участие в сомнительных кинопроектах, часто оказываются физически и морально истощены, иногда выглядят попросту глупо, сами того не подозревая. Вспоминая печальный опыт, кинозвезды смеются над собой или стыдливо отмахиваются и уж точно не согласятся на еще один дубль.

Вот подборка из 10 киносцен, о которых известные актеры предпочли бы с радостью забыть.

Bigpicture ru 0000

Хью Джекман — «Муви 43»

После награды за «Лучшую роль» в фильме «Отверженные» актер Хью Джекман потерял бдительность и вляпался в кинопроект «Муви 43» — абсурдную черную комедию. Только Джекману было не до смеха. Хью даже разместил в сети послание из будущего, в котором предупреждает себя отказаться от съемок в фильме «Муви 43».
Фотография: 10 стыдных киносцен, о которых актеры предпочли бы не вспоминать №2 - BigPicture.ru
Причиной стала сцена свидания вслепую Бет (Кейт Уинслет) и Дэвиса (Хью Джекман), в которой актер предстает перед зрителями с повисшей мужской «анатомической особенностью» на подбородке. Критики разгромили кино в пух и прах, а большинство знаменитых актеров, задействованных в «Муви 43», вообще не пришли на премьеру фильма.

Арнольд Шварценеггер — «Геркулес в Нью-Йорке»

В отличие от Хью Джекмана, Арнольд Шварценеггер вспоминает о своем провальном опыте в фильме «Геркулес в Нью-Йорке» со смехом: «Это дешевое кино, которое я всегда высмеиваю, потому что оно действительно нелепо, и я там нелепый».
Фотография: 10 стыдных киносцен, о которых актеры предпочли бы не вспоминать №3 - BigPicture.ru
Особенно неловко актеру за сцену, в которой его персонаж дерется с ненастоящим медведем. «Парень в костюме медведя, и я, глупый здоровяк, и вся эта смехотворная борьба. Просто остановите этот фильм».

Дженнифер Лоуренс — «Пассажиры»

Дженнифер Лоуренс призналась, что перед съемкой постельной сцены в фильме «Пассажиры» она сильно волновалась. Актриса переживала, ведь это был первый раз, когда ей предстояло обнажиться, да еще перед женатым актером Крисом Прэттом.
Bigpicture ru maxresdefault
После отснятой сцены Лоуренс вернулась домой, но беспокойство только усилилось. «Что я сделала? Ничего не понимаю. Он женат!» Чтобы успокоить совесть, Дженнифер позвонила своей маме: «Скажи мне, что все в порядке». Актриса рассказала, что это было самым странным, что она когда-либо делала.

Мартин Шин — «Апокалипсис сегодня»

В начальной сцене культового фильма «Апокалипсис сегодня» капитан Уиллард, будучи опустошенным и изрядно выпившим, устраивает погром в своем гостиничном номере. Герой разбрасывает вещи, разбивает кулаком вдребезги зеркало и, истекая кровью, погружается в мучительную депрессию. Все бы ничего, но во время съемок актер был действительно пьян.
Фотография: 10 стыдных киносцен, о которых актеры предпочли бы не вспоминать №5 - BigPicture.ru
На следующий день Шин вернулся в злополучную комнату и увидел кровь на кровати, что привело его в ужас: «Мне стало стыдно. Я не мог поверить, что это сделал я». Мартин Шин признался режиссеру фильма Фрэнсису Копполе, что не пересматривал эту сцену десятилетиями и отказывается до сих пор.

Николь Кидман — «Большая маленькая ложь»

Актриса Николь Кидман сыграла молодую женщину Селесту, страдающую от семейного насилия, в сериале «Большая маленькая ложь». Утонченная и образованная женщина вынуждена терпеть унижения от мужа, чтобы «сохранить брак». Сцена, в которой Селеста лежит у ног супруга-деспота, избитая и дрожащая, заставляет Кидман сжимать кулаки до сих пор.
Фотография: 10 стыдных киносцен, о которых актеры предпочли бы не вспоминать №6 - BigPicture.ru

«Я просто лежала на полу. Я не могла встать. Чувствовала себя униженной. Злость кипела во мне», — рассказывает Кидман.

После съемок подавленная актриса вернулась в отель. Она пыталась открыть дверь, но замок сломался. Тогда Николь подняла камень с земли и разбила им окно своего номера. Кидман признается, что сожалела о вспышке гнева, вызванной съемками унизительной сцены.

Брайан Крэнстон — «Во все тяжкие»

Актер Брайан Крэнстон, сыгравший Уолтера Уайта в сериале «Во все тяжкие», не может сдержать слез, когда вспоминает съемку одного из эпизодов. Речь идет о сцене, в которой он видит умирающую подругу своего ученика Джесси. Уолтер не помогает ей, а стоит в стороне и наблюдает, как девушка погибает.

Фотография: 10 стыдных киносцен, о которых актеры предпочли бы не вспоминать №7 - BigPicture.ru
Вот что чувствовал Крэнстон в тот момент: «Мой герой подходит к ней, потому что таков человеческий инстинкт. Но потом он останавливается, думая: „Погоди, она же наркоманка. Она загубит Джесси. Лучше будет, если я не стану делать ничего. Но она же такая молодая, годится мне в дочери“. И тут я вспомнил о своей дочери». Актер еще долгое время проигрывал в голове ужасную сцену и даже винил себя за безучастие своего героя.

Альфи Аллен — «Игра престолов»

Серия «Непокорные, несгибаемые, несломленные» признана фанатами худшей в сериале «Игра престолов». Актер Альфи Аллен, сыгравший Теона Грейджоя, солидарен с поклонниками и признается, что самой ужасной сценой для него стала свадебная ночь Сансы Старк и Рамси Болтона. Садист Болтон приказал Теону оставаться в комнате и смотреть на унижение Сансы.
Фотография: 10 стыдных киносцен, о которых актеры предпочли бы не вспоминать №8 - BigPicture.ru
Мучительная сцена настолько потрясла Аллена, что он еще долгое время неохотно обсуждал ее: «Я не очень хочу говорить об этом, но съемки брачной ночи Рамси и Сансы стали самым ужасным днем за все сезоны. И пусть вся жестокость останется за кадром, ваше воображение само все дорисует. Софи Тернер — прекрасная актриса».

Джессика Альба — «Фантастическая четверка — 2: Вторжение Серебряного серфера»

В 2007 году Джессика Альба сыграла супергероиню Сью Шторм во 2-й части «Фантастической четверки», что стало ударом по ее актерскому самолюбию. Режиссер фильма Тим Стори буквально заставил актрису чувствовать себя бесполезной.
Фотография: 10 стыдных киносцен, о которых актеры предпочли бы не вспоминать №9 - BigPicture.ru
В одной из сцен Джессика должна была заплакать. Она старалась сыграть убедительно, но Тим Стори постоянно критиковал ее: «Это выглядит слишком реалистично. Это выглядит слишком болезненно». После чего режиссер попросил Альбу вообще ничего не делать со своим лицом: «Просто спокойно смотри. Слезы потом дорисуем с помощью графики». Такое заявление актриса приняла близко к сердцу и почти разочаровалась в актерской профессии.

Риз Уизерспун и Роберт Паттинсон — «Воды слонам!»

«Лекарство от насморка Паттинсону!» — примерно так бы актриса Риз Уизерспун назвала сцену поцелуя с Робертом Паттинсоном в фильме «Воды слонам!». Актрисе по сценарию предстояло целоваться с заболевшим героем «Сумерек», и она заявляет, что это было неприятно: «У него был сильный насморк. Это было отвратительно».
Фотография: 10 стыдных киносцен, о которых актеры предпочли бы не вспоминать №10 - BigPicture.ru
Для Паттинсона съемки любовной сцены оказались не менее изнуряющими. «Мы снимали эту сцену, и насморк просто одолел меня. У Риз был парик, о который я постоянно вытирал свой нос».

Леонардо Ди Каприо и Тоби Магуайр — «Донс Плам»

Леонардо Ди Каприо и Тоби Магуайру трудно выделить сцену в фильме «Донс Плам», которой бы они не стыдились. На протяжении 86 минут герои обмениваются пошлыми шутками, смеются друг над другом, ковыряются в носу, пристают к посетителям кафе и ведут душевные монологи в туалете перед зеркалом.
Фотография: 10 стыдных киносцен, о которых актеры предпочли бы не вспоминать №11 - BigPicture.ru
Актеры считают, что участие в подобном проекте раскрывает их не с лучшей стороны. Поэтому Ди Каприо и Магуайр сделали ход конем и подали судебный иск на запрет просмотра фильма в США и Канаде. В своем открытом письме к недовольным актерам продюсер Дэйл Уитли упрекает их в неискренности и намеревается вернуть права на показ «Донс Плам».

Смотрите также: 15 ужасных рекламных кампаний, в существование которых трудно поверить

А вы знали, что у нас есть Telegram и Instagram?

Подписывайтесь, если вы ценитель красивых фото и интересных историй!

Популярное

Самые горячие темы

Почему евреи определяют национальность по матери

Почему евреи определяют национальность по матери

Кто такие американские шерифы и почему они не относятся к полиции

Кто такие американские шерифы и почему они не относятся к полиции

20 фотографий из серии «Слава Богу, показалось…»

20 фотографий из серии «Слава Богу, показалось…»

Новости партнеров

Новые посты

Тайны «Эммануэль»: триумф, жизнь и смерть Сильвии Кристель

Тайны «Эммануэль»: триумф, жизнь и смерть Сильвии Кристель

5 основных ролей, которые играют в отношениях влюбленные женщины

5 основных ролей, которые играют в отношениях влюбленные женщины

Краткое пособие для отпускниц

Краткое пособие для отпускниц

Трагическая судьба Нима Чимпского, или Можно ли из обезьяны сделать человека

Трагическая судьба Нима Чимпского, или Можно ли из обезьяны сделать человека

5 полезных советов для летних тренировок

5 полезных советов для летних тренировок

15 очаровательных животных, которые наслаждаются ароматом цветов

15 очаровательных животных, которые наслаждаются ароматом цветов

Ешь ананасы, рябчиков жуй: как отдыхали в советских и американских ресторанах по разные стороны «железного занавеса» в 60-е годы

Ешь ананасы, рябчиков жуй: как отдыхали в советских и американских ресторанах по разные стороны «железного занавеса» в 60-е годы

7 самых милых животных с острова Хоккайдо

7 самых милых животных с острова Хоккайдо

Тайна смерти актрисы Инны Бурдученко — заговор врагов или банальная халатность?

Тайна смерти актрисы Инны Бурдученко — заговор врагов или банальная халатность?

Почему в США так популярно обрезание? И дело вовсе не в гигиене или религии

Почему в США так популярно обрезание? И дело вовсе не в гигиене или религии

25 примеров необычной мебели, которая вызывает смех и восхищение в соцсетях

25 примеров необычной мебели, которая вызывает смех и восхищение в соцсетях

Что граждане СССР могли купить за 10 копеек

Что граждане СССР могли купить за 10 копеек

===== КОНЕЦ САЙТА https://bigpicture.ru/10-stydnyx-kinoscen-o-kotoryx-aktery-predpochli-by-ne-vspominat/ ====== ===== НАЧАЛО САЙТА https://bigpicture.ru/durnaja-krov-jelizabet-holms/ ====== "Дурная кровь", или Как аферистка Элизабет Холмс обвела вокруг пальца весь мир » BigPicture.ru

«Дурная кровь», или Как аферистка Элизабет Холмс обвела вокруг пальца весь мир

0

Американку Элизабет Холмс, основателя стартапа «Теранос», называли «Стивом Джобсом в юбке». Ее состояние в 2014 году оценивалось в 4,5 млрд долларов и стремительно росло. Бизнесу этой женщины пророчили многомиллиардный рынок, а также миллионы спасенных жизней. Но все быстро закончилось. Разоблачение аферы Холмс стало настоящим потрясением, ведь такого циничного и примитивного обмана никто не мог себе даже представить.

Bigpicture ru ykea43 c16x9x55px42p c16x9x55px42p cda026d752a57a24583fd998d90b7b82

О грандиозной афере Элизабет Холмс мир узнал благодаря журналисту Джону Каррейру. Он провел независимое расследование и рассказал о том, как появился «бизнес на крови». О своем расследовании Каррейру написал книгу «Дурная кровь», ставшую бестселлером. Так все же как девушка, даже не окончившая университет, стала одной из бизнес-икон планеты?

Bigpicture ru 20220104 th post

Компания «Теранос» (Theranos) не совершила никакого прорыва в медицине, а просто выдавала желаемое за действительное и подтасовывала факты. Обманутыми оказались не только пациенты, но и инвесторы и партнеры, которых оказалось немало. Конечно, одна Холмс, недоучка, бросившая Стэнфорд в 19 лет,  не смогла бы провернуть столь масштабное дело. Она собрала команду настоящих профессионалов, которые имели огромный авторитет в мире технологий.

Когда чужая репутация работает на тебя

Команда топ-менеджеров «Теранос» была безупречной. Коммерческий директор компании, Диана Паркс, более 25 лет работала в крупнейших фармацевтических компаниях мира. Вице-президент Джон Говард когда-то руководил дочерней фирмой Panasonic. Руководитель отдела биоинформатики Том Кемп перешел в «Теранос» из IBM, где занимал должность топ-менеджера. Финансовый директор Генри Мосли до этого работал в Intel.

Bigpicture ru 619e203f83910

Элизабет Холм на обложках

Все эти люди обеспечили Элизабет Холмс, не имевшей никаких заслуг, железную репутацию. Одну из ключевых ролей в успехе дела сыграл Генри Мосли. Он создавал для инвесторов финансовые прогнозы, показывавшие невероятный взлет стартапа. Сам он ничего не смыслил в технологиях, но понимал, что его цифры существенно завышены. Но финансовый директор полагался на Холмс, которая просто светилась уверенностью.

Приходивших к Мосли инвесторов тут же отводили в лабораторию к доктору химической инженерии Шануку Рою. Этот человек, будучи соучредителем «Теранос», владел вопросом как бог. Он показывал гостям фантастическое изобретение компании, и последние сомнения улетучивались. Но пора уже рассказать про устройство, которое сделало Элизабет Холмс и ее партнеров миллиардерами.

«Научный прорыв» компании «Теранос»

Доктор Шанук Рой в присутствии инвесторов прокалывал палец иглой и помещал каплю крови в картридж из белого пластика, размером с кредитку. Картридж он вставлял в ридер — небольшой аппарат, похожий на тостер. Через минуту данные с ридера о составе крови передавались на сервер, который вскоре выдавал подробный биохимический анализ. То есть так это выглядело с пояснениями доктора.

Bigpicture ru theranos

Чудесный аппарат «Теранос 1.0»

Что происходило в оборудовании на самом деле, знал только сам Шанук Рой. Аппарат, анализирующий кровь быстро и точно, назывался «Теранос 1.0» и производил неизменное впечатление. Деньги в компанию текли рекой, а Генри Мосли делал все более дерзкие прогнозы. Но однажды финансовый директор спустился с небес на землю.

На одном из совещаний в узком кругу топ-менеджеров, доктор Рой сообщил пренеприятную новость. Оказывается, чудо-аппарат работал непредсказуемо и в большинстве случаев вместо результата выдавал набор случайных данных. Поэтому доктор перед визитом гостей всегда загружал в его память нужные ему показатели. Говоря простыми словами, «Теранос 1.0», в который инвестировали миллионы, не работал.

Bigpicture ru 42 78360987

После этого Мосли стало гораздо сложнее делать оптимистичные графики. Потом была неудача с подтасовкой результатов на презентации в Швейцарии, из-за которой подлог едва не разоблачили. После этого финансовый директор отказался обманывать инвесторов и был тут же уволен. В нем уже не было особой необходимости — в «Теранос» верили и желающих вложить в стартап деньги было полно. Среди тех, кто принес в компанию деньги, был даже экс-министр обороны США Джеймс Мэттис!

Крах компании «Теранос»

Но обман не может продолжаться вечно. В 2013 году главный биохимик компании, проработавший с Холмс 8 лет, покончил с собой. Перед этим он длительное время пребывал в депрессии и жаловался жене, что его аппарат не работает. А в 2015 году несколько независимых лабораторий проверили результаты прибора «Теранос» и обман раскрылся.

Bigpicture ru 29theranos jumbo

Регуляторы Medicare и Medicaid опубликовали доклад на 121 странице, в котором раскрывалась вся подноготная хитрого стартапа. Согласно допустимым нормам, показатели параметров крови, полученные прибором «Теранос», не должны отличаться от выданных лабораторией более чем на 20 процентов.

Но все было гораздо хуже и «погрешность» иногда составляла 146 процентов! Это означает, что прибор мог показать здоровому человеку, что тот болен, и наоборот. А еще выяснилось, что большая часть результатов исследования крови получена вообще на оборудовании Siemens. В январе 2016 года прокуратура США начала расследование дела Элизабет Холмс.

14 марта 2018 года компании и самой Элизабет Холмс были предъявлены обвинения в массовом мошенничестве. 31 августа 2018 года Theranos прекратило свое существование и взяла на себя обязательство вернуть инвесторам деньги и компенсировать ущерб пострадавшим от фальшивых анализов крови.

Bigpicture ru 120441328 theranos reu

Фото из зала суда

Саму Элизабет Холмс судят до сих пор. По последним сведениям из зала суда в Сан-Хосе, штат Калифорния, 37-летней мошеннице грозит до 20 лет тюрьмы. Но адвокаты «Стива Джобса в юбке» уверены, что срок будет гораздо меньшим. Кстати, свою вину ни Холмс, ни ее компаньоны, признавать не захотели.

Об истории компании Theranos и ее основательницы, много лет водившей за нос весь мир, недавно сняли сериал «Выбывшая» (The Dropout). А вы заметили, что о мошенниках снимают подозрительно много хороших фильмов?

Смотрите также — Винтажный чудо-прибор для увеличения груди, в эффект от которого верили сотни тысяч женщин

А вы знали, что у нас есть Telegram и Instagram?

Подписывайтесь, если вы ценитель красивых фото и интересных историй!

Популярное

Самые горячие темы

Почему евреи определяют национальность по матери

Почему евреи определяют национальность по матери

Кто такие американские шерифы и почему они не относятся к полиции

Кто такие американские шерифы и почему они не относятся к полиции

20 фотографий из серии «Слава Богу, показалось…»

20 фотографий из серии «Слава Богу, показалось…»

Новости партнеров

Новые посты

Тайны «Эммануэль»: триумф, жизнь и смерть Сильвии Кристель

Тайны «Эммануэль»: триумф, жизнь и смерть Сильвии Кристель

5 основных ролей, которые играют в отношениях влюбленные женщины

5 основных ролей, которые играют в отношениях влюбленные женщины

Краткое пособие для отпускниц

Краткое пособие для отпускниц

Трагическая судьба Нима Чимпского, или Можно ли из обезьяны сделать человека

Трагическая судьба Нима Чимпского, или Можно ли из обезьяны сделать человека

5 полезных советов для летних тренировок

5 полезных советов для летних тренировок

15 очаровательных животных, которые наслаждаются ароматом цветов

15 очаровательных животных, которые наслаждаются ароматом цветов

Ешь ананасы, рябчиков жуй: как отдыхали в советских и американских ресторанах по разные стороны «железного занавеса» в 60-е годы

Ешь ананасы, рябчиков жуй: как отдыхали в советских и американских ресторанах по разные стороны «железного занавеса» в 60-е годы

7 самых милых животных с острова Хоккайдо

7 самых милых животных с острова Хоккайдо

Тайна смерти актрисы Инны Бурдученко — заговор врагов или банальная халатность?

Тайна смерти актрисы Инны Бурдученко — заговор врагов или банальная халатность?

Почему в США так популярно обрезание? И дело вовсе не в гигиене или религии

Почему в США так популярно обрезание? И дело вовсе не в гигиене или религии

25 примеров необычной мебели, которая вызывает смех и восхищение в соцсетях

25 примеров необычной мебели, которая вызывает смех и восхищение в соцсетях

Что граждане СССР могли купить за 10 копеек

Что граждане СССР могли купить за 10 копеек

===== КОНЕЦ САЙТА https://bigpicture.ru/durnaja-krov-jelizabet-holms/ ====== ===== НАЧАЛО САЙТА https://bigpicture.ru/kak-prozhivat-neprijatnye-jemocii/ ====== Как проживать неприятные эмоции » BigPicture.ru

Как проживать неприятные эмоции

0

Как бы мы не стремились к позитиву, но негативные чувства и эмоции — неотъемлемая часть нашей жизни. И если не получается их избежать, то нужно изменить к ним свое отношение, чтобы неприятности не отравляли нашу жизнь. Кто-то скажет, что это легко сделать только на словах. Но это не так — все «лекарства» от негатива есть внутри нас и нужно лишь научиться ими правильно пользоваться.

Bigpicture.ru Как проживать неприятные эмоции

Негативные эмоции неприятны тем, что застают нас врасплох. Можно прийти на работу с замечательным настроением, но всего одна фраза или даже взгляд могут все испортить. Часто бывает так, что разобраться с проблемой и искоренить негатив сразу не получается. Тогда остается одно — прожить неприятную эмоцию, чтобы она не засела глубоко в душе и тем более не вырвалась наружу. Итак, вот три основных принципа, зная которые можно переносить обиды и огорчения без ущерба.

Никогда себя не вините

Самая досадная ошибка, которую допускают люди в проблемных ситуациях — отождествление себя с дискомфортными эмоциями. Нельзя считать, что если случилось что-то плохое, то это из-за того, что с вами что-то не так. От чувства вины нужно избавляться в первую очередь. Вы в полном порядке, а негатив никак не связан с вашей личностью. Вы ни в чем не виноваты и то, что случилось, могло произойти с кем угодно.

Bigpicture.ru Как проживать неприятные эмоции mykaleidoscope ru p nevirazhennie emotsii oboi 67

Чувства вины, страха, неуверенности не помогают бороться с неприятными эмоциями. Наоборот, чем больше их наслаивается на проблему, тем страшнее она кажется. Только позитивный настрой и спокойное принятие случившегося помогут быстрее вернуться в стабильное состояние. Сочувственное отношение к себе — это основа выхода из кризиса.

Управляйте негативными эмоциями

Если мы игнорируем или отрицаем неприятные чувства, или, наоборот, обрушиваем их на тех, кто находится рядом, все только осложняется. Дискомфорт не только не уходит, он продолжает копиться внутри нас, задевая также и тех, кто рядом. Слишком большое количество негатива может привести к нервным срывам, депрессиям и ухудшению отношений с другими людьми.

Bigpicture.ru Как проживать неприятные эмоции

Негативные эмоции не нужно копить в себе. Не нужно их и сеять вокруг. Лучше всего «проживать» их, что позволит не только освободиться, но и укрепить себя морально. Принцип проживания негативных эмоций способен изменить к лучшему жизнь каждого.

Проживание эмоций

Научиться проживать негативные эмоции несложно. Нужно всего лишь изменить свое к ним отношение. Признайте все симптомы, которые будут у вас возникать после появления дискомфорта. Воспринимайте их как естественный, закономерный процесс, а не как нечто ужасное. Провозгласите эти эмоции хорошими, желательно вслух.

«Чувствовать страх, грусть, обиду, тревогу, панику — это естественно и хорошо!».

Bigpicture.ru Как проживать неприятные эмоции

После этого вы заметите, что ваше состояние начнет меняться. Вы почувствуете себя легче и свободнее, а негатив станет постепенно улетучиваться. Помните, что главный фактор, не дающий плохому улетучиваться — это наше сопротивление негативу. Если разобраться, то проблема не в негативных эмоциях, а в нашем стремлении их удержать.

Также полезно научиться правильно вести себя с неуравновешенными людьми. Ведь именно они, чаще всего, «дарят» нам негативные эмоции.

Смотрите также — 23 эмоции, которые люди чувствуют, но не могут объяснить

А вы знали, что у нас есть Telegram и Instagram?

Подписывайтесь, если вы ценитель красивых фото и интересных историй!

Популярное

Самые горячие темы

Почему евреи определяют национальность по матери

Почему евреи определяют национальность по матери

Кто такие американские шерифы и почему они не относятся к полиции

Кто такие американские шерифы и почему они не относятся к полиции

20 фотографий из серии «Слава Богу, показалось…»

20 фотографий из серии «Слава Богу, показалось…»

Новости партнеров

Новые посты

Тайны «Эммануэль»: триумф, жизнь и смерть Сильвии Кристель

Тайны «Эммануэль»: триумф, жизнь и смерть Сильвии Кристель

5 основных ролей, которые играют в отношениях влюбленные женщины

5 основных ролей, которые играют в отношениях влюбленные женщины

Краткое пособие для отпускниц

Краткое пособие для отпускниц

Трагическая судьба Нима Чимпского, или Можно ли из обезьяны сделать человека

Трагическая судьба Нима Чимпского, или Можно ли из обезьяны сделать человека

5 полезных советов для летних тренировок

5 полезных советов для летних тренировок

15 очаровательных животных, которые наслаждаются ароматом цветов

15 очаровательных животных, которые наслаждаются ароматом цветов

Ешь ананасы, рябчиков жуй: как отдыхали в советских и американских ресторанах по разные стороны «железного занавеса» в 60-е годы

Ешь ананасы, рябчиков жуй: как отдыхали в советских и американских ресторанах по разные стороны «железного занавеса» в 60-е годы

7 самых милых животных с острова Хоккайдо

7 самых милых животных с острова Хоккайдо

Тайна смерти актрисы Инны Бурдученко — заговор врагов или банальная халатность?

Тайна смерти актрисы Инны Бурдученко — заговор врагов или банальная халатность?

Почему в США так популярно обрезание? И дело вовсе не в гигиене или религии

Почему в США так популярно обрезание? И дело вовсе не в гигиене или религии

25 примеров необычной мебели, которая вызывает смех и восхищение в соцсетях

25 примеров необычной мебели, которая вызывает смех и восхищение в соцсетях

Что граждане СССР могли купить за 10 копеек

Что граждане СССР могли купить за 10 копеек

===== КОНЕЦ САЙТА https://bigpicture.ru/kak-prozhivat-neprijatnye-jemocii/ ====== ===== НАЧАЛО САЙТА https://bigpicture.ru/pochemu-kaznili-uchitelnicu/ ====== За что казнили Зинаиду Коноплянникову, простую учительницу » BigPicture.ru

Почему первой женщиной, казненной в России в 20 веке, стала учительница

0

В Российской империи женщин приговаривали к смертной казни нечасто. Обычно обвиненных в серьезных преступлениях дам отправляли на бессрочную каторгу. Но бывали и особые случаи. Зинаида Коноплянникова, простая сельская учительница, стала первой казненной в 20 веке в России женщиной. Чем же она заслужила такой суровый приговор?

Bigpicture.ru Почему казнили Зинаиду Коноплянникову

Зинаида Коноплянникова родилась в 1878 году в Санкт-Петербурге, в семье отставного унтер-офицера и крестьянки. О том, как проходило ее детство, ничего не известно. Есть лишь сведения, что в подростковом возрасте она разочаровалась в религии и действующем государственном строе. К счастью, ее резкие высказывания, сделанные в кругу одноклассников и друзей, не имели последствий.

Bigpicture.ru Зинаида Коноплянникова во время работы в школе

Зинаида Коноплянникова во время работы в школе

В 1896 году Коноплянникова закончила гимназию и поступила в учительскую семинарию. Получив профессию педагога начального народного училища, она уехала по распределению в Лифляндскую губернию. Молодая учительница работала в небольшой сельской школе в поселке, где было невыносимо скучно.

Работа в глуши

Единственными развлечениями молодой женщины были чтение и ведение дневника. Вт одна из записей, сделанная вскоре после приезда:

«Местность, где мне пришлось учительствовать, была невзрачная: с трех сторон лес, с четвертой — озеро Пеинус… Нищета среди местных жителей была поразительная… Выросшая сама в нищете, я не удивлялась их бедности, меня поразило одно: как можно жить так, жить без борьбы за лучшее будущее; как можно жить без единственного светлого луча в будущем, без единого проблеска на темном горизонте?».

Bigpicture.ru Рыбацкий поселок в Лифлянской губернии в начале 20 века

Рыбацкий поселок в Лифлянской губернии в начале 20 века

Быстро разочаровала учительницу и работа. В местности, где находилась школа, все разговаривали на эстонском языке. Его Коноплянникова не знала. При этом ее обязали вести уроки русском языке, который, в свою очередь, не знали ученики. Зинаида не понимала, в чем смысл ее труда, ведь эстонские дети не понимали ее речи. Учительница постоянно задавала себе вопрос — зачем она ведет уроки и почему эстонцам нельзя учиться на родном языке.

Так было до 1900 года, когда женщину перевели в училище села Гостилицы Петергофского уезда, что совсем рядом с Санкт-Петербургом. Там обстановка была живее, и Коноплянникова могла общаться с коллегами и друзьями. Но вскоре ее начали сторониться. Учительница критиковала государственную систему, образование и церковь. Вскоре на нее начали писать доносы.

«Перед школой жил жандарм, позади школы урядник, на соседней горе поп, рядом с ним псаломщик, и все четверо писали на меня доносы. Заведу ли беседы и чтения для народа невинного характера, псаломщик доносит инспектору, что „учительница занимается сторонними школьными занятиями, беседами и толкованиями“, поп пишет по своему ведомству, что учительница секты насаждает, толстовщину распространяет, юношество развращает».

Bigpicture.ru Эсерка Зинаида Коноплянникова. 1905 год

Эсерка Зинаида Коноплянникова. 1905 год

Служение народу

Вскоре давление оказалось настолько сильным, что Коноплянниковой пришлось уволиться и уехать из Гостилиц. Она даже рассталась со своим женихом Эрнестом Каппелем, сообщив ему, что посвящает себя служению народу. Ей было всего 22 года. Позднее Каппель давал следователю показания и сказал следующее:

«Коноплянникова производила на меня сильное впечатление тем, что она живо, с любовью и энергией относилась к делу школьного обучения, и я после нескольких встреч и разговоров с нею стал к ней неравнодушен, почти что влюбился. Коноплянникова отвечала мне так же — симпатией, ввиду чего я и решил жениться на Зинаиде. Когда я ей об этом сказал — это было летом 1901 года, она отказала мне, так как цель ее жизни — служение народу, в жертву коему она готова принести себя».

Bigpicture.ru Почему казнили Зинаиду Коноплянникову

В 1902 году девушка уже плотно сидела «на крючке» у жандармов. В одном из доносов на нее говорилось, что Коноплянникова хранит антирелигиозную литературу. Эти книги ставят под сомнение существование Бога и легитимность государя Николая II. В 1903 году Зинаиду впервые арестовали, но вскоре отпустили. Второй арест произошел через год, и тоже был недолгим.

К этому моменту от задумчивой сельской учительницы не осталось и следа. Зинаида Коноплянникова превратилась в пламенную революционерку-эсерку. В 1906 году она решила перейти к радикальным мерам и начала готовить покушение. Своей целью женщина выбрала генерал-майора Георгия Александровича Мина. Это был властный и жестокий человек, не раз руководивший подавлениями восстаний.

Убийство генерала Мина

Мин считал, что мятежников не нужно арестовывать и лучше убивать их на месте. Призывал он расправляться и с пропагандистами, сеявшими в народе смуту. В народе генерала ненавидели и именно поэтому он и стал мишенью для Зинаиды. 13 августа 1906 года Мин ехал в открытом экипаже с женой и дочерью. Революционерка хорошо изучила его маршрут и поджидала на одном из поворотов.

Bigpicture.ru Генерал-майор Г.А. Мин

Генерал-майор Г.А. Мин

Когда коляска с семьей генерала притормозила, Зинаида подошла вплотную и четыре раза выстрелила в Мина. Угнетатель простого народа был убит на месте. Коноплянникову задержали с поличным. Суд над революционеркой состоялся всего через две недели, 26 августа 1906 года. Свой поступок она объяснила просто:

«Сотнями считали убитых в Москве. За что, спрашивается, убивали московский народ? Я убила Мина как убийцу тех невинных, кровью которых орошены улицы Москвы».

Bigpicture.ru Почему казнили Зинаиду Коноплянникову5

Конечно же, это не признали оправданием и Коноплянникой вынесли смертный приговор. Его привели в исполнение через три дня после суда. Женщину повесили во дворе Шлиссельбургской крепости утром 29 августа 1906 года. Очевидцы рассказывали, что до самого конца Зинаида вела себя с достоинством. От услуг священника женщина отказалась и было ощущение, что она идет на смерть как на праздник.

Смотрите также — Как дворянка и декадентка Лариса Рейснер стала секс-символом Октябрьской революции

А вы знали, что у нас есть Telegram и Instagram?

Подписывайтесь, если вы ценитель красивых фото и интересных историй!

Популярное

Самые горячие темы

Почему евреи определяют национальность по матери

Почему евреи определяют национальность по матери

Кто такие американские шерифы и почему они не относятся к полиции

Кто такие американские шерифы и почему они не относятся к полиции

20 фотографий из серии «Слава Богу, показалось…»

20 фотографий из серии «Слава Богу, показалось…»

Новости партнеров

Новые посты

Ешь ананасы, рябчиков жуй: как отдыхали в советских и американских ресторанах по разные стороны «железного занавеса» в 60-е годы

Ешь ананасы, рябчиков жуй: как отдыхали в советских и американских ресторанах по разные стороны «железного занавеса» в 60-е годы

7 самых милых животных с острова Хоккайдо

7 самых милых животных с острова Хоккайдо

Тайна смерти актрисы Инны Бурдученко — заговор врагов или банальная халатность?

Тайна смерти актрисы Инны Бурдученко — заговор врагов или банальная халатность?

Почему в США так популярно обрезание? И дело вовсе не в гигиене или религии

Почему в США так популярно обрезание? И дело вовсе не в гигиене или религии

25 примеров необычной мебели, которая вызывает смех и восхищение в соцсетях

25 примеров необычной мебели, которая вызывает смех и восхищение в соцсетях

Что граждане СССР могли купить за 10 копеек

Что граждане СССР могли купить за 10 копеек

В Токио работает клуб, где мужчины могут побороться с девушками

В Токио работает клуб, где мужчины могут побороться с девушками

Санкции городских властей против голубей: чем птица мира насолила людям

Санкции городских властей против голубей: чем птица мира насолила людям

10 источников аллергии в вашем доме

10 источников аллергии в вашем доме

15 фотографий, которые сделают ваш день чуточку лучше

15 фотографий, которые сделают ваш день чуточку лучше

Тяп, ляп и готово: 22 фото о том, что бывает, когда руки растут не из того места

Тяп, ляп и готово: 22 фото о том, что бывает, когда руки растут не из того места

Возраст — фигуре не помеха: звездный тренер рассказала, как оставаться в форме после 40 лет

Возраст — фигуре не помеха: звездный тренер рассказала, как оставаться в форме после 40 лет

===== КОНЕЦ САЙТА https://bigpicture.ru/pochemu-kaznili-uchitelnicu/ ====== ===== НАЧАЛО САЙТА https://www.decipherzone.com/blog-detail/static-code-analysis-tools-for-java ====== Static Code Analysis Tools For Java To Provide Quality Measurements
===== КОНЕЦ САЙТА https://www.decipherzone.com/blog-detail/static-code-analysis-tools-for-java ====== ===== НАЧАЛО САЙТА https://stackoverflow.com/questions/65600895/how-to-get-call-back-when-all-files-are-uploaded ====== spring - How to get call back when all files are uploaded? - Stack Overflow
Asked
Viewed 341 times
-1

I need to read all files from a remote location and send those to another service and the delete all files if those are sent successfully. My code is working fine for a single file but it if I want to read all files in a loop then code is not getting executed.

Please find the code as below. In RemoteFileReadImpl class, I am trying to read files in loop which is not working. In WebClientUtil class, I am sending the files to another service. On return of success response I want to rename the files which are already read.

package com.remotefileread.serviceImpl;

import java.io.IOException;

import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.client.WebClient;

import reactor.core.publisher.Mono;

public class WebClientUtil{

    WebClient webClient = WebClient.create("http://localhost:9091");

    public Mono<HttpStatus> ftpFileSend(MultipartFile fileData) {

        MultiValueMap<String,Object> body=new LinkedMultiValueMap<String,Object>();

        try {
            body.add("file", fileData.getBytes());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        return webClient
                .post()
                .uri("/storeFileData")
                .contentType(MediaType.MULTIPART_FORM_DATA)
                .body(BodyInserters.fromMultipartData(body))
                .exchange()
                .map(response -> {
                    
                    return response.statusCode();
                });
    }
    
}

    package com.remotefileread.serviceImpl;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.nio.file.Files;
    import java.util.Base64;
    
    import org.apache.commons.io.IOUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.MediaType;
    import org.springframework.mock.web.MockMultipartFile;
    import org.springframework.stereotype.Service;
    import org.springframework.web.multipart.MultipartFile;
    import org.springframework.web.reactive.function.server.ServerResponse;
    
    import com.remotefileread.model.SendFileData;
    import com.remotefileread.service.RemoteFileRead;
    
    import reactor.core.publisher.Mono;
    
    @Service
    public class RemoteFileReadImpl implements RemoteFileRead{
    
        @Autowired
        WebClientUtil webClientUtil;
    
        public Mono<ServerResponse> ftpFileRead() { 
            File directoryPath = new File("\\\\localhost\\SharedFolder\\csv_container");
            File files[] = directoryPath.listFiles();
            try {
                for(File csvFile : files) {
                    SendFileData fileData=new SendFileData();   
                    byte[] content = Files.readAllBytes(csvFile.toPath());
    
                    fileData.setFilename(csvFile.getName());
                    fileData.setFileContent(Base64.getEncoder().encodeToString(content));
                    fileData.setCustomerName("Cust");
                    FileInputStream input = new FileInputStream(csvFile);
                    MultipartFile multipartFile = new MockMultipartFile("file",
                            csvFile.getName(),"text/plain",IOUtils.toByteArray(input));
                    input.close();
    
                    Mono<HttpStatus> monoStatus = webClientUtil.ftpFileSend(multipartFile);
    
                    monoStatus
                    .doOnSuccess( httpStatus ->
                    {
                        System.out.println("Http Status:" + httpStatus);
                        
                    })
                    .doOnError(error -> 
                    {
                        System.out.println("Http Status:" + error);
                        
                    });
                }
                return ServerResponse.ok().contentType(MediaType.TEXT_PLAIN).bodyValue("OK");
            }
            catch(Exception ex) {
                return ServerResponse.badRequest().contentType(MediaType.TEXT_PLAIN).bodyValue("Error Message: " + ex.getMessage());
            }
        }
    }

2

1 Answer 1

1

Some tips on how to make your question better:

  • You mentioned what you want to happen when each file succeeds, but not if one fails. Should it continue onto the next file, or stop and return a server error?
  • Explain how it currently behaves, and how it differs to your expectation/desire.
  • Highlight the point in your code where it's not working.

If you are using reactive, then you usually would not loop like you are doing. You would want to create a stream of the files for processing, as a Flux:

Flux.fromArray(directoryPath.listFiles())

Next you add operations onto the end of that stream, slowly building a "plan" of how the stream must be processed to produce a certain result. The Flux above is prepared to produce the files one by one down the stream to subscribers. Note that in your code, nothing ever subscribes to the Mono, so nothing will ever start.

WebClient also returns a new stream. the flatMap function allows mapping elements in the stream to other streams which are then flattened in the elements' places within the original stream. In your case the web request is just returning a Mono.

So bearing that in mind, refactoring your code that creates the MultipartFile into another method createMultipart, and using flat map to make the web request via your util class, we would have this stream:

Flux<HttpStatus> statusStream = 
      Flux.fromArray(directoryPath.listFiles())
          .map(this::createMultipart)
          .flatMap(webClientUtil::ftpFileSend)

Let's talk about the WebClient usage now.

Note that using exchange() (now deprecated) means that you need to be sure to consume response data, or you can cause a memory leak. Thus exchangeToMono() or retrieve() are usually better

If you use retrieve(), a non-successful response will automatically raise an exception which will cause an 'error' signal in the stream, which will stop any further files from being processed.

So overall you could have an implementation like this:

    public Mono<ResponseEntity<Void>> ftpFileSend(MultipartFile fileData) {

        MultiValueMap<String,Object> body=new LinkedMultiValueMap<String,Object>();

        try {
            body.add("file", fileData.getBytes());
        } catch (IOException e) {
            return Mono.error(e);   // <-- note how to create an error signal
        }


        return webClient
                .post()
                .uri("/storeFileData")
                .contentType(MediaType.MULTIPART_FORM_DATA)
                .body(BodyInserters.fromMultipartData(body))
                .retrieve()
                .toBodilessEntity()
    }

...

    public Mono<ServerResponse> ftpFileRead() { 
    
        return Flux.fromArray(directoryPath.listFiles())
                   .flatMap(this::sendAndRename)
                   .onErrorContinue((ex, file) -> log("failed to process: " + file)) // <-- skips the erroring item and continues
                   .then(Mono.just(
                       ServerResponse.ok()
                             .contentType(MediaType.TEXT_PLAIN)
                             .bodyValue("OK"))
                   .onErrorResume(ex -> Mono.just(
                       ServerResponse.badRequest()
                             .contentType(MediaType.TEXT_PLAIN)
                             .bodyValue("Error Message:" + ex.getMessage())); // <-- not really a need if we just skip.
    }

    public Mono<Void> sendAndRename(final File file) {
        MultipartFile multipart = createMultipart(file);
        return webClientUtil.ftpFileSend(multipart)
                            .then(() -> renameDoneFile(file));
    }

Here all files are sent. If an error happens while sending or renaming, it is logged, the file skipped and the process continues with the next file.

2
  • Thanks for your response. I want to send the files one by one and rename the file if read successfully and print error logs if not read successfully and send the next file again. Jan 7, 2021 at 3:53
  • Okay I've updated the code. That should give you an idea of how to use Reactive operators. Obviously you need to implement renameDoneFile yourself.
    – rewolf
    Jan 7, 2021 at 4:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.

 
===== КОНЕЦ САЙТА https://stackoverflow.com/questions/65600895/how-to-get-call-back-when-all-files-are-uploaded ======